package com.tdam2013.grupo08.network;
import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;



public class XmlResultHandler extends DefaultHandler{
    
    public static final int RESULT_ERROR = 1;
    public static final int RESULT_SUCCESS = 0;
    public static final int RESULT_USUARIO_EXISTENTE = 5;
    public static final int RESULT_USUARIO_NO_REGISTRADO = 11;
    ServerMessage mensajeRecibido;
    ArrayList<ServerMessage> lstMensajesRecibidos;
    
    String resultInfo;
    int result;
    
    public XmlResultHandler() {
		// TODO Auto-generated constructor stub
    	
    	mensajeRecibido = new ServerMessage();
    	lstMensajesRecibidos = new ArrayList<ServerMessage>();
	}
    
    public String getResultInfo()
    {
        return resultInfo;
    }
    
    public int getResult()
    {
    	return result;
    }
    
    public ArrayList<ServerMessage> getMessages()
    {
    	return lstMensajesRecibidos;
    }
    
    @Override
    public void startElement(String uri, String localName, String qName,
                    Attributes attributes) throws SAXException {
            // TODO Auto-generated method stub
            
            super.startElement(uri, localName, qName, attributes);
            
            if(localName.equals("result"))
            {
                    if(attributes.getValue("type").equals("success"))
                    {
                            result = RESULT_SUCCESS;
                            resultInfo = "success";
                    }
                    if(attributes.getValue("type").equals("error"))
                    {
                            result = RESULT_ERROR;
                            resultInfo = "Ha ocurrido un error.";
                    }
            }
            if(localName.equals("detail"))
            {
                    if(attributes.getValue("code").compareTo(String.valueOf(RESULT_USUARIO_EXISTENTE))==0)
                    {
                            result = RESULT_USUARIO_EXISTENTE;
                            resultInfo = "Usuario ya registrado";
                    }
                    if(attributes.getValue("code").compareTo(String.valueOf(RESULT_USUARIO_NO_REGISTRADO))==0)
                    {
                            result = RESULT_USUARIO_NO_REGISTRADO;
                            resultInfo = attributes.getValue("description");
                            resultInfo += " - Usuario no registrado";
                    }
                    else if (attributes.getValue("description")!=null)
                    {
                            resultInfo = attributes.getValue("description");
                    }
            }
            if(localName.equals("message"))
            {
            	String timeStamp = attributes.getValue("timestamp");
            	String from = attributes.getValue("from");
            	
            	ServerMessage mensajeRecibido = new ServerMessage();
            	mensajeRecibido.setTimeStamp(timeStamp);
            	mensajeRecibido.setFrom(from);
            	
            	lstMensajesRecibidos.add(mensajeRecibido);
            	this.mensajeRecibido = mensajeRecibido;
            }
    }
    
    @Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		super.characters(ch, start, length);
		String cdata = new String(ch, start, length);
		mensajeRecibido.setMessage(cdata);
	}
}
